
 1000         .LIST MOFF
 1010  *SAVE S.PUTNEY'S COLOR
 1020         .OR $6000
 1030         .TF B.PUTNEY
 1040  *--------------------------------
 1050  *
 1060  *      FAST ROD'S COLOR PATTERN
 1070  *
 1080  *      CHARLES H. PUTNEY
 1090  *      18 QUINNS ROAD
 1100  *      SHANKILL
 1110  *      CO. DUBLIN
 1120  *      IRELAND
 1130  *
 1140  *--------------------------------
 1150  *
 1160  *      PAGE ZERO ADDRESSES
 1170  *
 1180  INVI   .EQ $EE      VARIABLE 40 - I
 1190  INVK   .EQ $EF      VARIABLE 40 - K
 1200  POINTR .EQ $F9      LORES PAGE POINTER (TWO BYTES)
 1210  I      .EQ $FB      VARIABLE I
 1220  J      .EQ $FC      VARIABLE J
 1230  K      .EQ $FD      VARIABLE K
 1240  W      .EQ $FE      VARIABLE W
 1250  COLOR1 .EQ $07      HALF OF COLOR FORMULA
 1260  *--------------------------------
 1270  COLOR  .EQ $08,09
 1280  COLEVN .EQ $08      EVEN ROW COLOR
 1290  COLODD .EQ $09      ODD ROW COLOR 
 1300  MASK   .EQ $0A,0B
 1310  MSKODD .EQ $0A
 1320  MSKEVN .EQ $0B
 1330  *
 1340  *--------------------------------
 1350  *
 1360  *      ADDRESS TABLE
 1370  *
 1380  ODDMSK .EQ $F0      MASK FOR ELIMINATING UPPER BLOCK (LOWER NIBBLE)
 1390  EVNMSK .EQ $0F      MASK FOR ELIMINATING LOWER BLOCK (UPPER NIBBLE)
 1400  GRAPH  .EQ $FB40    ENABLE LO RES GRAPHICS
 1410  *--------------------------------
 1420  *   MACRO DEFINITIONS
 1430  *--------------------------------
 1440         .MA PLY      PLY ]1
 1450         LDY ]1       Y-COORD
 1460         LDA LORESL,Y 
 1470         STA POINTR 
 1480         LDA LORESH,Y
 1490         STA POINTR+1
 1500         TYA
 1510         AND #1       GET LSB
 1520         TAX
 1530         .EM
 1540  *--------------------------------
 1550         .MA PLX      PLX ]1
 1560         LDY ]1       X-COORD
 1570         LDA (POINTR),Y GET THE PAGE BYTE
 1580         AND MASK,X
 1590         ORA COLOR,X
 1600         STA (POINTR),Y PUT IT BACK
 1610         .EM
 1620  *--------------------------------
 1630         .MA NEXT     NEXT VAR,LIMIT+1
 1640         INC ]1       INCREMENT ]1 VARIABLE
 1650         LDA ]1       TEST IF ]1=]2 YET
 1660         CMP #]2
 1670         BCS :1       YES, LEAVE LOOP
 1680         JMP NEXT.]1  NO, KEEP LOOPING
 1690  :1
 1700         .EM
 1710  *--------------------------------
 1720         .MA GET      GET FORMULA,INDEX
 1730         LDY I
 1740         LDA ]1L-1,Y
 1750         STA POINTR
 1760         LDA ]1H-1,Y
 1770         STA POINTR+1
 1780         LDY ]2
 1790         LDA (POINTR),Y
 1800         .EM
 1810  *--------------------------------
 1820  *
 1830  *
 1840  *      MAIN LOOP
 1850  *
 1860  ROD    LDA $C056    SET LORES GRAPHICS ON
 1870         LDA $C053    MIXED MODE
 1880         JSR GRAPH
 1890         LDA #ODDMSK
 1900         STA MSKODD
 1910         LDA #EVNMSK
 1920         STA MSKEVN
 1930  *--------------------------------
 1940  BIG.LOOP
 1950         JSR $FBE2    *** TESTING BEEP ***
 1960         LDA #0       FOR W=3 TO 50 (0...47)
 1970         STA W
 1980  *---NEXT W COMES HERE------------
 1990  NEXT.W LDA #1       FOR I=1 TO 19
 2000         STA I 
 2010         LDA #39
 2020         STA INVI
 2030         LDA $C030    JUST FOR AUDIBLE FEEDBACK
 2040  *---NEXT I COMES HERE------------
 2050  NEXT.I LDA I        SET UP K = I+J
 2060         STA K
 2070         LDA INVI
 2080         STA INVK
 2090         >GET FORM1,W
 2100         STA COLOR1   SAVE IT FOR INNER LOOP
 2110         LDA #0       FOR J=0 TO 19
 2120         STA J
 2130  *---NEXT J COMES HERE------------
 2140  NEXT.J >GET FORM2,J
 2150         CLC          ADD THE FORMULAS
 2160         ADC COLOR1   ACC = J*3/(I+3)+I*W/12
 2170         AND #$0F     MASK OFF TOP
 2180         STA COLEVN   EVEN COLOR
 2190         ASL          SHIFT 4 BITS
 2200         ASL
 2210         ASL
 2220         ASL
 2230         STA COLODD   ODD COLOR
 2240  *--------------------------------
 2250         >PLY I
 2260         >PLX K
 2270         >PLX INVK
 2280  *--------------------------------
 2290         >PLY INVI
 2300         >PLX K
 2310         >PLX INVK
 2320  *--------------------------------
 2330         >PLY K
 2340         >PLX I
 2350         >PLX INVI
 2360  *--------------------------------
 2370         >PLY INVK
 2380         >PLX I
 2390         >PLX INVI
 2400  *--------------------------------
 2410         INC K
 2420         DEC INVK
 2430         >NEXT J,20
 2440  *--------------------------------
 2450         DEC INVI
 2460         >NEXT I,20
 2470  *--------------------------------
 2480         >NEXT W,48
 2490  *--------------------------------
 2500         LDA $C000    ANY KEY PRESSED?
 2510         BMI ROD4     YES
 2520         JMP BIG.LOOP   NO, KEEP LOOPING
 2530  ROD4   STA $C010
 2540         RTS
 2545         .LIST OFF
 2550  *--------------------------------
 2560  *
 2570  *      LORES GRAPHICS PAGE
 2580  *      BASE ADDRESSES (40 COL)
 2590  *
 2600  LORESL .HS 0000808000008080
 2610         .HS 0000808000008080
 2620         .HS 2828A8A82828A8A8
 2630         .HS 2828A8A82828A8A8
 2640         .HS 5050D0D05050D0D0
 2650  LORESH .HS 0404040405050505
 2660         .HS 0606060607070707
 2670         .HS 0404040405050505
 2680         .HS 0606060607070707
 2690         .HS 0404040405050505
 2700  *
 2710  *--------------------------------
 2720  *
 2730  *      TABLE FOR I*W/12
 2740  *
 2750  FORM1L .DA #WI1,#WI2,#WI3,#WI4,#WI5,#WI6,#WI7
 2760         .DA #WI8,#WI9,#WI10,#WI11,#WI12,#WI13,#WI14
 2770         .DA #WI15,#WI16,#WI17,#WI18,#WI19
 2780  FORM1H .DA /WI1,/WI2,/WI3,/WI4,/WI5,/WI6,/WI7
 2790         .DA /WI8,/WI9,/WI10,/WI11,/WI12,/WI13,/WI14
 2800         .DA /WI15,/WI16,/WI17,/WI18,/WI19
 2810  *--------------------------------
 2820  WI1  .HS 000000000000000000010101010101010101010101020202
 2830       .HS 020202020202020202030303030303030303030303040404
 2840  WI2  .HS 000000010101010101020202020202030303030303040404
 2850       .HS 040404050505050505060606060606070707070707080808
 2860  WI3  .HS 000101010102020202030303030404040405050505060606
 2870       .HS 060707070708080808090909090A0A0A0A0B0B0B0B0C0C0C
 2880  WI4  .HS 010101020202030303040404050505060606070707080808
 2890       .HS 0909090A0A0A0B0B0B0C0C0C0D0D0D0E0E0E0F0F0F000000
 2900  WI5  .HS 0101020202030304040505050606070707080809090A0A0A
 2910       .HS 0B0B0C0C0C0D0D0E0E0F0F0F000001010102020303040404
 2920  WI6  .HS 01020203030404050506060707080809090A0A0B0B0C0C0D
 2930       .HS 0D0E0E0F0F00000101020203030404050506060707080809
 2940  WI7  .HS 0102020304040505060707080809090A0B0B0C0C0D0E0E0F
 2950       .HS 0F00000102020303040505060607070809090A0A0B0C0C0D
 2960  WI8  .HS 0202030404050606070808090A0A0B0C0C0D0E0E0F000001
 2970       .HS 0202030404050606070808090A0A0B0C0C0D0E0E0F000001
 2980  WI9  .HS 02030304050606070809090A0B0C0C0D0E0F0F0001020203
 2990       .HS 04050506070808090A0B0B0C0D0E0E0F0001010203040405
 3000  WI10 .HS 0203040505060708090A0A0B0C0D0E0F0F00010203040405
 3010       .HS 06070809090A0B0C0D0E0E0F000102030304050607080809
 3020  WI11 .HS 02030405060708090A0B0B0C0D0E0F000102030405060607
 3030       .HS 08090A0B0C0D0E0F00010102030405060708090A0B0C0C0D
 3040  WI12 .HS 030405060708090A0B0C0D0E0F000102030405060708090A
 3050       .HS 0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102
 3060  WI13 .HS 030405060708090A0B0D0E0F0001020304050607080A0B0C
 3070       .HS 0D0E0F0001020304050708090A0B0C0D0E0F000102040506
 3080  WI14 .HS 0304050708090A0B0C0E0F0001020305060708090A0C0D0E
 3090       .HS 0F00010304050607080A0B0C0D0E0F01020304050608090A
 3100  WI15 .HS 03050607080A0B0C0D0F00010204050607090A0B0C0E0F00
 3110       .HS 010304050608090A0B0D0E0F00020304050708090A0C0D0E
 3120  WI16 .HS 04050608090A0C0D0E00010204050608090A0C0D0E000102
 3130       .HS 04050608090A0C0D0E00010204050608090A0C0D0E000102
 3140  WI17 .HS 04050708090B0C0E0F010203050608090A0C0D0F00020304
 3150       .HS 0607090A0B0D0E000103040507080A0B0C0E0F0102040506
 3160  WI18 .HS 040607090A0C0D0F000203050608090B0C0E0F0102040507
 3170       .HS 080A0B0D0E000103040607090A0C0D0F000203050608090B
 3180  WI19 .HS 040607090B0C0E0F0103040607090A0C0E0F010204060709
 3190       .HS 0A0C0D0F0102040507090A0C0D0F0002040507080A0C0D0F
 3200  *--------------------------------
 3210  *
 3220  *      TABLE FOR J*3/(I+3)
 3230  *
 3240  FORM2L .DA #JI1,#JI2,#JI3,#JI4,#JI5,#JI6,#JI7
 3250         .DA #JI8,#JI9,#JI10,#JI11,#JI12,#JI13,#JI14
 3260         .DA #JI15,#JI16,#JI17,#JI18,#JI19
 3270  FORM2H .DA /JI1,/JI2,/JI3,/JI4,/JI5,/JI6,/JI7
 3280         .DA /JI8,/JI9,/JI10,/JI11,/JI12,/JI13,/JI14
 3290         .DA /JI15,/JI16,/JI17,/JI18,/JI19
 3300  *--------------------------------
 3310  JI1  .HS 00000102030304050606070809090A0B0C0C0D0E
 3320  JI2  .HS 00000101020303040405060607070809090A0A0B
 3330  JI3  .HS 0000010102020303040405050606070708080909
 3340  JI4  .HS 0000000101020203030304040505060606070708
 3350  JI5  .HS 0000000101010202030303040404050506060607
 3360  JI6  .HS 0000000101010202020303030404040505050606
 3370  JI7  .HS 0000000001010102020203030303040404050505
 3380  JI8  .HS 0000000001010101020202030303030404040405
 3390  JI9  .HS 0000000001010101020202020303030304040404
 3400  JI10 .HS 0000000000010101010202020203030303030404
 3410  JI11 .HS 0000000000010101010102020202030303030304
 3420  JI12 .HS 0000000000010101010102020202020303030303
 3430  JI13 .HS 0000000000000101010101020202020203030303
 3440  JI14 .HS 0000000000000101010101010202020202030303
 3450  JI15 .HS 0000000000000101010101010202020202020303
 3460  JI16 .HS 0000000000000001010101010102020202020203
 3470  JI17 .HS 0000000000000001010101010101020202020202
 3480  JI18 .HS 0000000000000001010101010101020202020202
 3490  JI19 .HS 0000000000000000010101010101010202020202
 3500  *--------------------------------

